package com.thunisoft.netty.custom;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
  * 自定义编码器
 * @title CustomEncoder.java
 * @package com.thunisoft.netty.custom
 * @projectName spring.boot
 * @author yzj 
 * @date 2019年10月8日 下午5:24:43
 */
@ChannelHandler.Sharable
public class CustomEncoder extends MessageToByteEncoder<CustomMessage>{

	@Override
	protected void encode(ChannelHandlerContext ctx, CustomMessage msg, ByteBuf out) throws Exception {
		  // 将Message转换成二进制数据
		CustomHeader header = msg.getHeader();

        // 这里写入的顺序就是协议的顺序.

        // 写入Header信息
        out.writeInt(header.getVersion());
        out.writeInt(msg.getContent().length());

        out.writeBytes(header.getSessionId().getBytes());

        // 写入消息主体信息
        out.writeBytes(msg.getContent().getBytes());
	}

}
